'use strict'
const path = require('path')
// const basePath = 'http://192.168.0.116:5000'
let basePath = 'http://192.168.0.50'
// const basePath = 'http://192.168.0.192:5000'
const defaultSettings = require('./src/settings.js')

function resolve (dir) {
    return path.join(__dirname, dir)
}

const name = defaultSettings.title || 'vue Element Admin' // page title

// 如果您的端口设置为80，
// 使用管理员权限执行命令行。
// 例如，Mac：sudo npm run
// 您可以通过以下方法更改端口：
// port = 9528 npm run dev或npm run dev --port = 9528
const port = process.env.port || process.env.npm_config_port || 9528 // dev port

// 所有配置项说明都可以在https://cli.vuejs.org/config/中找到
module.exports = {
    /**
   * 如果您打算在子路径下部署站点，则需要设置publicPath,
   * 例如GitHub Pages。 如果您打算将网站部署到https://foo.github.io/bar/,
   * 然后publicPath应该设置为“ / bar /”.
   * 在大多数情况下，请使用'/' !!!
   * 详细信息: https://cli.vuejs.org/config/#publicpath
   */
    publicPath: '/mrdrg',
    outputDir: 'dist',
    assetsDir: 'static',
    lintOnSave: process.env.NODE_ENV === 'development',
    productionSourceMap: false,
    devServer: {
        port: port,
        // open: true,
        overlay: {
            warnings: false,
            errors: true
        },
        proxy: {
            '/svr': {
                /* 目标代理服务器地址 */
                target: basePath, //
                /* 允许跨域 */
                changeOrigin: true
            }
        }
    },
    configureWebpack: {
        // 在webpack的名称字段中提供应用程序的标题，以便
        // 可以在index.html中对其进行访问以注入正确的标题。
        name: name,
        resolve: {
            alias: {
                '@': resolve('src')
            }
        }
    },
    chainWebpack (config) {
        config.plugins.delete('preload') // TODO: need test
        config.plugins.delete('prefetch') // TODO: need test

        // set svg-sprite-loader
        config.module
            .rule('svg')
            .exclude.add(resolve('src/assets/icons'))
            .end()
        config.module
            .rule('icons')
            .test(/\.svg$/)
            .include.add(resolve('src/assets/icons'))
            .end()
            .use('svg-sprite-loader')
            .loader('svg-sprite-loader')
            .options({
                symbolId: 'icon-[name]'
            })
            .end()

        // set preserveWhitespace
        config.module
            .rule('vue')
            .use('vue-loader')
            .loader('vue-loader')
            .tap(options => {
                options.compilerOptions.preserveWhitespace = true
                return options
            })
            .end()

        config
            .when(process.env.NODE_ENV !== 'development',
                config => {
                    config
                        .plugin('ScriptExtHtmlWebpackPlugin')
                        .after('html')
                        .use('script-ext-html-webpack-plugin', [{
                            // `runtime` must same as runtimeChunk name. default is `runtime`
                            inline: /runtime\..*\.js$/
                        }])
                        .end()
                    config
                        .optimization.splitChunks({
                            chunks: 'all',
                            cacheGroups: {
                                libs: {
                                    name: 'chunk-libs',
                                    test: /[\\/]node_modules[\\/]/,
                                    priority: 10,
                                    chunks: 'initial' // 仅打包最初依赖的第三方
                                },
                                elementUI: {
                                    name: 'chunk-elementUI', // 将elementUI拆分为一个包
                                    priority: 20, // 重量需要大于libs和app，否则将打包到libs或app中
                                    test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // 为了适应cnpm
                                },
                                commons: {
                                    name: 'chunk-commons',
                                    test: resolve('src/components'), // 可以自定义您的规则
                                    minChunks: 3, //  最小共同数
                                    priority: 5,
                                    reuseExistingChunk: true
                                }
                            }
                        })
                    config.optimization.runtimeChunk('single')
                }
            )
    }
}
